// 输入 客户ID 查找 客户姓名
/**
 * 第一个参数输入客户列表Cache，第二个参数 输入客户ID，来查找客户的名字name，如果找不到就返回 'ERROR'
 * @param {Array} clientsCache 客户列表Cache
 * @param {String} clientId 客户ID
 */
const getNameById = (clientsCache, clientId) => {
  const obj = clientsCache.find((value) => value.id == clientId);
  if (obj) {
    return obj.name;
  }
  return 'ERROR';
}

/**
 * 通过clientId查找客户对象
 * @param {Array} clientsCache 
 * @param {string} clientId 
 */
const getClientById = (clientsCache, clientId) => {
  const obj = clientsCache.find((value) => value.id == clientId);
  if (obj) {
    return obj;
  }
  return 'ERROR';
}

/**
 * 将日期数字YYYYMMDD转化为YYYY-MM-DD的形式
 * @param {number} dateNum 
 */
const dateNumFormat = (dateNum) => {
  const deliveryDate_str = dateNum.toString();
  return `${deliveryDate_str.substring(0, 4)}-${deliveryDate_str.substring(4, 6)}-${deliveryDate_str.substring(6, 8)}`;
}

/**
 * 用当前日期生成一个 YYYY-MM-DD HH:MM 格式的时间
 */
const generateTime = () => {
  const date = new Date();
  const year = date.getFullYear();
  const month = (date.getMonth() + 1) < 10 ? '0' + (date.getMonth() + 1).toString() : (date.getMonth() + 1);
  const day = date.getDate() < 10 ? '0' + date.getDate() : date.getDate();
  const hour = date.getHours() < 10 ? '0' + date.getHours() : date.getHours();
  const minute = date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes();
  return `${year}-${month}-${day} ${hour}:${minute}` ;
}

/**
 * 用当前日期生成一个 YYYY-MM-DD 格式的日期
 */
const generateDate = () => {
  const date = new Date();
  const year = date.getFullYear();
  const month = (date.getMonth() + 1) < 10 ? '0' + (date.getMonth() + 1).toString() : (date.getMonth() + 1);
  const day = date.getDate() < 10 ? '0' + date.getDate() : date.getDate();
  return `${year}-${month}-${day}` ;
}

/**
 * 用当前时间生成一个 早上、中午、晚上、凌晨 的状态
 */
const generateTimeStatus = () => {
  const date = new Date();
  const timeStatus = ['早上', '中午', '晚上', '凌晨'];
  const timeRange = [[6, 11], [11, 13], [13, 25], [0, 6]];
  const hour = date.getHours();
  let ans = '你'
  timeRange.forEach((value, index) => {
    const start = value[0];
    const end = value[1];
    if (hour >= start && hour < end) {
      ans = timeStatus[index];
    }
  })
  return ans;
}

/**
 * 通过数据和列名，返回一个data中columnName列不重复的数组
 * 返回值格式 [{ text: rowValue, value: rowValue }, ... ] ，其中每一项的rowValue不重复。
 * @param {Array} data 数据
 * @param {string} columnsName 列名
 */
const generateFilters = (data, columnsName) => {
  const dataColumnSet = new Set(data.map((value) => {
    return value[columnsName];
  }));
  const ans = [];
  dataColumnSet.forEach((value) => {
    ans.push({
      text: value,
      value: value
    })  
  });
  return ans;
}

const isNull = (obj) => {
  if (!obj && typeof(obj)!="undefined" && obj!=0) { 
    return true;
  }　
  return false;
}

/**
 * 收拢orders数组，相邻相同客户的数组收拢成一个
 */
const reduceOrders = (orders) => {
  return orders.reduce((acc, cur) => {
    const ansLen = acc.length;
    if (ansLen == 0) {
      acc.push({
        value: [cur],
        clientId: cur.clientId,
        orderQuantity: 1
      });
    }
    else {
      const accClientOrders = acc[ansLen - 1];
      if (accClientOrders.clientId == cur.clientId) {
        accClientOrders.value.push(cur);
        accClientOrders.orderQuantity ++;
      }
      else {
        acc.push({
          value: [cur],
          clientId: cur.clientId,
          orderQuantity: 1
        })
      }
    }
    return acc;
  }, [])
}


export {
  getNameById,
  getClientById,
  dateNumFormat,
  generateTime,
  generateDate,
  generateTimeStatus,
  generateFilters,
  isNull,
  reduceOrders
};

